home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2004 #6
/
Amiga Plus CD - 2004 - No. 06.iso
/
AmigaPlus
/
Begleitmaterial
/
50Tools
/
Grafik
/
PerfectPaint
/
rexx
/
box
/
MotionBlur.rx
< prev
next >
Wrap
Text File
|
2000-10-31
|
2KB
|
145 lines
/* arexx Script
Motion Blur
*/
call addlib("rexxmathlib.library", 5, -30, 0)
options results
parse ARG Port x1 y1 x2 y2 b
ADDRESS COMMAND
Length=40
Angle=0
Mix=50
Dec=1
IF EXISTS('PerfectPaint:Prefs/Rexx_Prefs/MotionBlur') THEN DO
IF OPEN('lfile','PerfectPaint:Prefs/Rexx_Prefs/MotionBlur', "R") then DO
Length= READLN('lfile')
Angle= READLN('lfile')
Mix= READLN('lfile')
Dec= READLN('lfile')
CALL CLOSE('lfile')
END
END
ADDRESS value Port
pp_GetDepth
D=result
IF D<24 then DO
pp_Warn 'This*script*is*only|for*24bits*Picture.'
pp_PermitRefresh
Exit
END
W=x2-x1+1
H=y2-y1+1
pp_DialogInit 250 115 "*Motion*Blur*" 4
pp_Integer 0 140 5 50 16 "Length*(5-60)" 1 Length
pp_Integer 1 140 25 50 16 "Angle*(0-359)" 1 Angle
pp_Integer 2 140 45 50 16 "Mix*value*(1-100)" 1 Mix
pp_Integer 3 140 65 50 16 "Mix*decrement*(0-50)" 1 Dec
pp_Dialog
rc=result
if rc=0 then
do
EXIT
end
pp_GetDialog 0
Length=result
pp_GetDialog 1
Angle=result
pp_GetDialog 2
Mix=result
pp_GetDialog 3
Dec=result
CALL SavePrefs('MotionBlur',Length,Angle,Mix,Dec)
ADDRESS value Port
if Angle=90|Angle=270 then Angle=Angle+1
Rads=Angle*(3.14149/180)
if Length>50 then Mix=Length
pp_StencilStat
Stencil=result
pp_PicttoSpare
pp_SpareOnOff
if Stencil=1 then DO
pp_StencilOff
END
pp_PickBrush x1 y1 W H
pp_GetWidthB
IF result=0 THEN DO
pp_Warn 'Not*enough*memory.'
EXIT
END
if Stencil=0 then DO
pp_UpdateUndo
END
Do i=Length*2 to 2 by -2
X=trunc(sqrt(power(i,2)/(1+power(abs(tan(Rads)),2))))
Y=trunc(sqrt(power(i,2)-power(x,2)))
if Angle>90 & Angle<270 then X=-X
if Angle>0 & Angle<180 then Y=-Y
pp_BrushOpacity Mix
pp_Plot x1+X+W/2 y1+Y+H/2
Mix=Mix-Dec
END
IF Stencil=1 then DO
pp_StencilOn
END
pp_FreeBrush
Mix=100-TRUNC((2/5)*Length+6)
pp_SpareOnOff
pp_ComposeReqOff
pp_UpdateUndoBox x1 y1 x2 y2
pp_EffectOn
pp_Spare
pp_Compose 0 Mix 0
pp_Boxf x1 y1 x2 y2
pp_EffectOff
pp_ComposeReqOn
EXIT
SavePrefs: PROCEDURE
Prefname='PerfectPaint:Prefs/Rexx_Prefs/'||ARG(1)
if EXISTS(Prefname) THEN DO
ADDRESS COMMAND
'delete >nil: '||Prefname
END
IF OPEN('pfile',PrefName,'W') THEN DO
do i=2 to ARG()
CALL WRITELN('pfile',ARG(i))
end
CALL CLOSE('pfile')
RETURN